home *** CD-ROM | disk | FTP | other *** search
Text File | 1985-08-22 | 21.6 KB | 960 lines | [TEXT/Anon] |
- EDIT SUBTTL FULL SCREEN TEXT EDITOR.
- EDIT SPACE 4,10
- ** EDIT - EDIT A TEXT FILE.
- *
- * ENTRY A0/D0 - FILE NAME.
-
-
- EDIT TST.B D0
- BEQ.S EDIT3 ;IF NO FILE NAME GIVEN
- TST.B EDFN(A6)
- BEQ.S EDIT1 ;IF NO FILE ALREADY SELECTED
- LEA EDITC(PC),A3
- BSR RWB
- BRA.S EDIT3
-
- EDIT1 BSR VALF ;GET VALIDATE FILE NAME
- BGT.S EDIT2 ;IF FILE NAME OK
- EDITX RTS
-
- EDIT2 BSR OEF ;OPEN/LOAD FILE
-
- *
-
- EDIT3 CLR.B ENDE(A6)
- MOVE.L EDTE(A6),-(SP)
- _TEActivate
- MOVE.L EDITF(A6),A1
- TST.B EDAF(A6)
- BEQ.S EDIT4 ;IF NO FILE SELECTED
- BSR LEF ;LOAD EDIT FILE
- EDIT4 MOVE.L #$0000FFFF,D0
- _FlushEvents
-
- *
-
- EDITS _SystemTask ;RUN DESKTOP
- MOVE.L EDTE(A6),-(SP)
- _TEIdle
- CLR.B -(SP)
- MOVE #-1,-(SP) ;CHECK ALL EVENTS
- PEA EVTR(A6)
- _GetNextEvent
- MOVE.B (SP)+,D0
- BEQ EDITS ;IF NO POSTED EVENTS
- MOVE WHAT(A6),D0 ;EVENT TYPE
- ADD D0,D0
- MOVE EDITA(PC,D0),D0
- BEQ EDITS ;IF PROCESSING NOT REQUIRED
- JSR EDITA(PC,D0) ;PROCESS EVENT
- TST.B ENDE(A6)
- BEQ EDITS
- RTS ;RETURN TO CALLER
-
- EDITA DC 0 ;NULL EVENT
- DC EDMD-EDITA ;MOUSE-DOWN
- DC 0
- DC EDKD-EDITA ;KEY-DOWN
- DC 0
- DC EDKD-EDITA ;AUTO-KEY
- DC 0
- DC 0
- DC 0
- DC 0
- DC 0
- DC 0
- DC 0
- DC 0
- DC 0
- DC 0
-
- EDKD MOVE MODFS(A6),D0
- BTST #8,D0
- BNE.S EDKD1 ;IF COMMAND KEY DOWN
- MOVE.L EDTE(A6),A3
- MOVE teLength(A3),D0
- CMP #31500,D0
- BLT EDKD0 ;IF MEMORY NOT FULL
- LEA LEFA(PC),A3
- BSR RWB ;*FILE TOO LARGE*
- RTS
-
- EDKD0 MOVE.L MESSAGE(A6),D0
- MOVE D0,-(SP)
- MOVE.L EDTE(A6),-(SP)
- _TEKey ;PROCESS KEY
- RTS
-
- EDKD1 CLR.L -(SP) ;PROCESS COMMAND KEY
- MOVE.L MESSAGE(A6),D0
- MOVE D0,-(SP)
- _MenuKey ;LOOK UP POSSIBLE MENU COMMAND
- MOVE.L (SP)+,D0
- BRA EDMNCALL ;PROCESS AS MENU SELECTION
-
- *
-
- EDMD CLR -(SP) ;LOCATE MOUSE
- MOVE.L WHERE(A6),-(SP)
- PEA SCRS(A6)
- _FindWindow
- MOVE.L SCRS(A6),D3 ;WINDOW FOR MOUSE DOWN
- MOVE (SP)+,D0 ;PART OF WINDOW CLICKED IN
- ADD D0,D0
- MOVE EDMDT(PC,D0),D1
- JSR EDMDT(PC,D1) ;PROCESS MOUSE DOWN
- EDMDX RTS
-
- EDMDT DC EDMDX-EDMDT ;NONE OF THE FOLLOWING
- DC EDMN-EDMDT ;MENU BAR
- DC EDSW-EDMDT ;SYSTEM WINDOW
- DC EDCN-EDMDT ;CONTENT REGION
- DC EDMDX-EDMDT ;DRAG REGION
- DC EDMDX-EDMDT ;GROW REGION
- DC EDGW-EDMDT ;GO AWAY REGION
-
- EDCN CMP.L EDWN(A6),D3
- BEQ.S EDCN1 ;IF IN EDIT WINDOW
- MOVE #4,-(SP)
- _SysBeep ;SOUND WARNING
- RTS ;NO FURTHER PROCESSING
-
- EDCN1 PEA WHERE(A6)
- _GlobalToLocal ;CONVERT TO EDIT COORDINATES
- CLR.B -(SP)
- MOVE.L WHERE(A6),-(SP)
- PEA EWND(PC) ;VIEW RECT
- _PtInRect
- MOVE.B (SP)+,D0
- BNE.S EDCN2 ;IF IN TEXT AREA
- CLR -(SP)
- MOVE.L WHERE(A6),-(SP)
- MOVE.L EDWN(A6),-(SP)
- PEA CTRL(A6)
- _FindControl
- MOVE (SP)+,D7
- BNE EDSB ;IF SCROLL REQUEST
- EDCN2 MOVE.L WHERE(A6),-(SP)
- MOVE MODFS(A6),D0
- MOVEQ #1,D2
- BTST #9,D0
- BNE.S EDCN3 ;IF SHIFT KEY DOWN
- MOVEQ #0,D2
- EDCN3 MOVE.B D2,-(SP)
- MOVE.L EDTE(A6),-(SP)
- _TEClick
- RTS
-
- *
-
- EDSW PEA EVTR(A6) ;EVENT RECORD
- MOVE.L D3,-(SP)
- _SystemClick ;PROCESS CLICK IN SYSTEM WINDOW
- RTS
-
- *
-
- EDGW CLR.B -(SP)
- MOVE.L D3,-(SP)
- MOVE.L WHERE(A6),-(SP)
- _TrackGoAway ;HIGHLIGHT GOAWAY REGION
- MOVE.B (SP)+,D0
- BEQ.S EDGW1 ;IF GOAWAY NOT REQUESTED
- BSR CLOF
- ST ENDE(A6) ;RETURN TO SHELL
- EDGW1 RTS
-
- * EDIT MENU PROCESSING.
-
- EDMN CLR.L -(SP)
- MOVE.L WHERE(A6),-(SP)
- _MenuSelect ;TRACK MOUSE AND HIGHLIGHT SELECTION
- MOVE.L (SP)+,D0
- EDMNCALL LEA MNUM(A6),A0
- MOVE.L D0,(A0)
- MOVE D0,D1 ;MENU LINE NUMBER
- MOVE D0,D7
- ADD D1,D1
- SWAP D0
- ADD D0,D0 ;MENU COLUMN NUMBER
- MOVE EDMNT(PC,D0),D0
- BEQ.S EDMNX
- JSR EDMNT(PC,D0)
- EDMNX CLR -(SP)
- _HiLiteMenu ;REMOVE MENU HIGHLIGHTING
- RTS
- EDMNT DC 0 ;MOUSE DOWN OUTSIDE OF MENU
- DC 0 ;MENU COLUMN 1
- DC EMN2-EDMNT ;FILE
- DC EMN3-EDMNT ;EDIT
- DC EMN4-EDMNT ;TRANSFER
- DC EMN5-EDMNT ;SIZE
-
- * *FILE*.
-
- EMN2 MOVE EMN2T(PC,D1),D0
- BEQ.S EMN2X ;IF NO PROCESSING
- JSR EMN2T(PC,D0)
- EMN2X RTS
-
- EMN2T DC 0
- DC EMN21-EMN2T ;NEW
- DC EMN22-EMN2T ;OPEN
- DC EMN23-EMN2T ;CLOSE
- DC EMN24-EMN2T ;SAVE
- DC EMN24-EMN2T ;SAVE AS
- DC EMN25-EMN2T ;MERGE
- DC EMN26-EMN2T ;PRINT
- DC EMN27-EMN2T ;QUIT
-
- EMN2W BSR RWB ;RUN WARNING BOX
- EMN2Y BSR EDUPD ;REDRAW SCREEN
- RTS
-
- EMN21 LEA EDITH(PC),A3 ;ASK *FOR SURE ?*
- BSR RYN
- BEQ EMN2Y
- BSR CLOF2 ;ERASE TEXT IN MEMORY
- RTS
-
- EMN22 LEA EDITC(PC),A3
- TST.B EDFN(A6)
- BNE EMN2W ;IF FILE ALREADY OPEN
- BSR GETF ;GET FILE NAME
- BEQ EMN2Y ;IF NO NAME SELECTED
- BSR OEF ;OPEN/LOAD EDIT FILE
- TST.B EDAF(A6)
- BEQ EMN2Y ;IF NO FILE
- BSR LEF ;LOAD EDIT FILE
- RTS
-
- EMN23 BSR CLOF ;CLOSE FILE
- RTS
-
- EMN24 LEA EDITE(PC),A3 ;*FILE NOT OPEN*
- TST.B EDFN(A6)
- BEQ EMN2W ;IF FILE NOT ALREADY OPEN
- BSR GETS ;GET SAVE FILE NAME
- BEQ EMN2Y ;IF NO NAME SELECTED
- BSR SEF ;SAVE EDIT FILE
- BRA EMN2Y ;REDRAW SCREEN
-
- EMN25 BSR GETF ;GET MERGE FILE NAME
- BEQ.S EMN25X ;IF NO NAME SELECTED
- BSR OEF ;OPEN/LOAD MERGE FILE
- TST.B EDAF(A6)
- BEQ.S EMN25X ;IF NO FILE
- BSR MEF ;LOAD EDIT FILE
- EMN25X BSR EDUPD ;REDRAW SCREEN
- RTS
-
- EMN26 BSR PREF ;PRINT EDIT FILE
- RTS
-
- EMN27 ST ENDE(A6)
- RTS
-
- * *EDIT*.
-
- EMN3 MOVE EMN3T(PC,D1),D0
- BEQ.S EMN3X ;IF NO PROCESSING
- MOVE.L EDTE(A6),A3
- JSR EMN3T(PC,D0)
- EMN3X RTS
- EMN3T DC 0
- DC EMN31-EMN3T ;CUT
- DC EMN32-EMN3T ;COPY
- DC EMN33-EMN3T ;PASTE
- DC EMN34-EMN3T ;DELETE
- DC 0
- DC 0
-
- EMN31 MOVE.L A3,-(SP)
- _TECut
- RTS
- EMN32 MOVE.L A3,-(SP)
- _TECopy
- RTS
- EMN33 MOVE.L A3,-(SP)
- _TEPaste
- RTS
- EMN34 MOVE.L A3,-(SP)
- _TEDelete
- RTS
- EMN35
- RTS
-
- * *Transfer*.
-
- EMN4 MOVE EMN4T(PC,D1),D0
- BEQ.S EMN4X
- JSR EMN4T(PC,D0) ;PROCESS SELECTION
- EMN4X RTS
- EMN4T DC 0
- DC EMN41-EMN4T ;RETURN TO SHELL
- DC 0
-
- EMN41 ST ENDE(A6)
- RTS
- EMN42
- RTS
-
- * *Style*.
-
- EMN5 MOVE EMN5T(PC,D1),D6
- BEQ.S EMN5X
- CLR.L -(SP) ;GET MENU HANDLE
- MOVE #5,-(SP)
- _GetMHandle
- MOVE.L (SP)+,A4
- MOVE.L EDTE(A6),A3
- MOVE.L (A3),A3
- JSR EMN5T(PC,D6)
- EMN5X RTS
- EMN5T DC 0
- DC EMN51-EMN5T ;9 POINT
- DC EMN52-EMN5T ;12 POINT
- DC 0
-
- EMN51 MOVE #9,txSize(A3)
- MOVE #9,teAscent(A3)
- MOVE #9+3,teLineHite
- BSR EDUPD ;REDRAW SCREEN
- EMN51.1 MOVE.L A4,-(SP) ;MENU HANDLE
- MOVE #1,-(SP) ;MENU ITEM
- MOVE D7,ESTY(A6)
- MOVE D7,D6
- SUB #2,D6
- MOVE.B D6,-(SP)
- _CheckItem ;SET/CLEAR CHECK
- MOVE.L A4,-(SP)
- MOVE #2,-(SP)
- SUB #1,D7
- MOVE.B D7,-(SP)
- _CheckItem ;SET/CLEAR CHECK
- RTS
-
- EMN52 MOVE #12,txSize(A3)
- MOVE #12,teAscent(A3)
- MOVE #12+4,teLinehite(A3)
- BSR EDUPD
- BRA EMN51.1
-
- * EDUPD - REDRAW EDIT SCREEN.
-
- EDUPD MOVE.L EDWN(A6),-(SP)
- _BeginUpdate
- PEA EWND(PC)
- _InvalRect
- PEA EWND(PC) ;VIEW RECTANGLE
- MOVE.L EDTE(A6),-(SP)
- _TEUpdate
- MOVE.L EDWN(A6),-(SP)
- _EndUpdate
- RTS
- SCROLL SPACE 4,10
- ** PROCESS SCROLL REQUESTS.
- *
- * ENTRY D7 - CONTROL PART.
-
- EDSB MOVE.L CTRL(A6),A3 ;CONTROL HANDLE
- MOVE.L EDTE(A6),A4 ;GET TE RECORD
- LEA SCRLA(PC),A2
- MOVE.L A4,(A2)
- MOVE.L (A4),A4
- MOVE.L A3,-(SP)
- MOVE teNLines(A4),D5 ;NUMBER OF EDIT LINES
- BEQ.S EDSB0
- SUBQ #1,D5
- EDSB0 ADDQ #1,D5
- MOVE D5,-(SP)
- _SetMaxCtl
- MOVE teLineHite(A4),D6
- MOVEQ #0,D4 ;COMPUTE LINES IN WINDOW
- MOVE teViewRect+W+W(A4),D4
- SUB teViewRect(A4),D4
- DIVU D6,D4
- LEA EDSBT(PC),A0
- MOVE.L A0,A2
- EDSB1 MOVE (A2)+,D1 ;PART TYPE
- BEQ.S EDSBX ;IF NO PROCESSING REQUIRED
- MOVE (A2)+,D2
- CMP D1,D7
- BNE EDSB1 ;IF NO PART MATCH
- LEA TOTH(A6),A2
- JSR 0(A0,D2)
- EDSBX RTS
-
- EDSBT DC 20,EDOW-EDSBT ;UP ARROW
- DC 21,EDUP-EDSBT ;DOWN ARROW
- DC 22,EDPU-EDSBT ;PAGE UP
- DC 23,EDPD-EDSBT ;PAGE DOWN
- DC 129,EDTM-EDSBT ;THUMB
- DC 0
-
- * SCROLL PAGE UP/DOWN.
-
- EDPD MOVE D4,D3
- BSR SCROLL ;SCROLL PAGE
- RTS
- EDPU NEG D4 ;OPPOSITE DIRECTION
- BRA EDPD
-
- * SCROLL LINE UP.
-
- EDUP CLR -(SP)
- MOVE.L A3,-(SP) ;CONTROL HANDLE
- MOVE.L WHERE(A6),-(SP) ;CLICK LOCATION
- PEA EDUP1(PC) ;SCROLL LINE UP
- _TrackControl
- MOVE (SP)+,D0
- MOVE.L A3,-(SP) ;DEACTIVATE ACTION PROC
- CLR.L -(SP)
- _SetCtlAction
- RTS
- EDUP1 MOVE.L (SP)+,A0 ;RETURN ADDRESS
- MOVE (SP)+,D0 ;PART NUMBER
- MOVE.L (SP)+,A3 ;CONTROL HANDLE
- MOVE.L A0,-(SP)
- MOVEQ #1,D3 ;SCROLL UP
- BSR SCROLL
- RTS
-
- * SCROLL LINE DOWN.
-
- EDOW CLR -(SP)
- MOVE.L A3,-(SP) ;CONTROL HANDLE
- MOVE.L WHERE(A6),-(SP) ;CLICK LOCATION
- PEA EDOW1(PC) ;SCROLL LINE UP
- _TrackControl
- MOVE (SP)+,D0
- MOVE.L A3,-(SP)
- CLR.L -(SP)
- _SetCtlAction ;DEACTIVATE ACTION PROC
- RTS
- EDOW1 MOVE.L (SP)+,A0
- MOVE (SP)+,D0 ;PART NUMBER
- MOVE.L (SP)+,A3 ;CONTROL HANDLE
- MOVE.L A0,-(SP)
- MOVEQ #-1,D3 ;SCROLL DOWN
- BSR.S SCROLL
- RTS
-
- * THUMB REGION.
-
- EDTM CLR -(SP) ;GET CURRENT POSITION
- MOVE.L A3,-(SP)
- _GetCtlValue
- MOVE (SP)+,D3
- CLR -(SP) ;TRACK THUMB MOVEMENT
- MOVE.L A3,-(SP)
- MOVE.L WHERE(A6),-(SP)
- CLR.L -(SP)
- _TrackControl
- MOVE (SP)+,D0
- CMP D0,D7
- BNE.S EDTM1 ;IF EXITED FROM THUMB
- CLR -(SP)
- MOVE.L A3,-(SP)
- _GetCtlValue ;GET NEW THUMB VALUE
- MOVE D3,D0
- MOVE (SP)+,D3
- SUB D0,D3
- BSR.S SCROLL1
- BNE.S EDTM1 ;IF SCROLL TOOK PLACE
- MOVE.L A3,-(SP)
- MOVE D0,-(SP) ;RESTORE ORIGINAL VALUE
- _SetCtlValue
- EDTM1 RTS
-
- *
-
- SCROLL CLR -(SP) ;GET CURRENT VALUE
- MOVE.L A3,-(SP)
- _GetCtlValue
- MOVE (SP)+,D0
- SCROLL1 MOVE D0,D1
- TST D3
- BLT.S SCRL2 ;IF BACKWARD MOVEMENT
- ADD D3,D1
- CMP D5,D1
- BLE.S SCRL1 ;IF NOT AT END OF TEXT
- MOVE D5,D1
- SCRL1 MOVE D5,D2
- SUB D0,D2 ;LINES LEFT TO DISPLAY
- CMP D4,D2
- BGE.S SCRL5 ;IF MORE THAN ONE SCREEN FULL
- CLR D3
- BRA.S SCRLX
- SCRL2 ADD D3,D1
- BGT.S SCRL3 ;IF NOT NOW AT 1ST LINE
- CLR D1
- MOVE (A2),D3 ;POSITION TO 1ST LINE
- NEG D3
- BRA.S SCRL5
- SCRL3 TST (A2)
- BEQ.S SCRLX ;DONT SCROLL PAST 1ST LINE
- SCRL5 MOVE.L A3,-(SP)
- ADD D3,(A2)
- MULS D6,D3
- MOVE D1,-(SP)
- _SetCtlValue ;SET NEW VALUE
- MOVE #0,-(SP)
- NEG D3
- MOVE D3,-(SP)
- MOVE.L SCRLA(PC),-(SP)
- _TEScroll
- MOVEQ #1,D3 ;SET SCROLL FLAG
- SCRLX RTS
-
- SCRLA DS.L 1 ;TE HANDLE
- EDITS TITLE CYCLAN TEXT EDITOR SUBROUTINES.
- CLOF SPACE 4,10
- ** CLOF - CLOSE EDIT FILE.
- * EXIT CCR .NE. 0 IF ERROR ON CLOSE.
-
- CLOF MOVE.L EDTE(A6),A0
- MOVE.L (A0),A3 ;TE RECORD
- CLR.L D4
- MOVE TELENGTH(A3),D4 ;TEXT LENGTH
- TST.B EDFN(A6)
- BEQ.S CLOFX ;IF NO FILE SELECTED
- LEA INFT(PC),A2
- MOVE.L #'TEXT',(A2) ;'TEXT'
- MOVE.L EDITF(A6),A1
- BSR OBFW ;OPEN FOR WRITE
- MOVE.L teTextH(A3),A0 ;TEXT HANDLE
- MOVE.L (A0),A0
- MOVE.L D4,D0
- JSR IOWRITEB(PC) ;WRITE FILE
- BNE.S CLOFER
- JSR IOCLS(PC) ;CLOSE FILE
- BNE.S CLOFER ;IF ERROR
- LEA DEFVOL(A6),A0
- LEA VOLNAM(A6),A4
- CLR.L (A4)
- MOVE.L A4,ioFileName(A0)
- MOVE FFPB+ioVRefNum(A1),ioVRefNum(A0)
- CLR ioVolIndex(A0)
- _GetVolInfo
- _FlushVol ;ENSURE ALL DATA IS ON THE DISK
-
- CLOF2 CLR.B EDFN(A6) ;ERASE TEXT RECORD
- MOVE.L EDTE(A6),A0
- MOVE.L (A0),A3 ;TE RECORD
- CLR teSelStart(A3)
- MOVE teLength(A3),teSelEnd(A3)
- MOVE.L A0,-(SP)
- _TEDelete ;RELEASE TEXT
- CLR teSelEnd(A3)
- MOVE.L VBAR(A6),-(SP) ;RESET VERTICAL SCROLL BAR
- CLR -(SP)
- _SetCtlValue
- MOVE.L EDWN(A6),-(SP)
- PEA EWNB(PC) ;RESET WINDOW TITLE
- _SetWTitle
- CLOFX CLR D0
- RTS
-
- CLOFER LEA EDITG(PC),A3 ;*UNABLE TO WRITE FILE*
- BSR IFN ;BUILD ERROR MESSAGE
- BSR IFE
- BSR RWB
- BRA.S CLOFX
- EMENU SPACE 4,10
- ** EMENU - SET UP EDIT WINDOW MENU LINE.
-
- EMENU CLR.L -(SP)
- MOVE #1,-(SP) ;1ST MENU COLUMN
- PEA EDM1(PC)
- _NewMenu
- MOVE.L (SP),MN1H(A6) ;COLUMN 1 HANDLE
- MOVE.L (SP),-(SP)
- PEA EDM11(PC)
- _AppendMenu
- CLR -(SP)
- _InsertMenu
- CLR.L -(SP)
- MOVE #2,-(SP) ;2ND MENU COLUMN
- PEA EDM2(PC)
- _NewMenu
- MOVE.L (SP),MN2H(A6)
- MOVE.L (SP),-(SP)
- PEA EDM21(PC)
- _AppendMenu
- CLR -(SP)
- _InsertMenu
- CLR.L -(SP)
- MOVE #3,-(SP) ;3RD MENU COLUMN
- PEA EDM3(PC)
- _NewMenu
- MOVE.L (SP),MN3H(A6)
- MOVE.L (SP),-(SP)
- PEA EDM31(PC)
- _AppendMenu
- CLR -(SP)
- _InsertMenu
- CLR.L -(SP)
- MOVE #4,-(SP)
- PEA EDM4(PC)
- _NewMenu
- MOVE.L (SP),-(SP)
- PEA EDM41(PC)
- _AppendMenu
- CLR -(SP)
- _InsertMenu
- CLR.L -(SP)
- MOVE #5,-(SP)
- PEA EDM5(PC) ;* SIZE *
- _NewMenu
- MOVE.L (SP),-(SP)
- MOVE.L (SP),A4
- PEA EDM51(PC)
- _AppendMenu
- CLR -(SP)
- _InsertMenu
- MOVE ESTY(A6),D7 ;SET CHECK MARK FOR SELECTED SIZE
- BSR EMN51.1
- _DrawMenuBar ;DRAW NEW MENU BAR
- RTS
-
- * EDIT MENU ENTRIES.
-
- EDM1 DC $0114 ;APPLE SYMBOL
- EDM11 STR ('Edit;by;J. R. Hogue')
- EDM2 STR ('File')
- EDM21 STR ('New;Open...;Close;Save...;Save As...;Merge...;Print;Quit/Q')
- EDM3 STR ('Edit')
- EDM31 STR ('Cut/X;Copy/C;Paste/V;Delete/D')
- EDM4 STR ('Transfer')
- EDM41 STR ('Shell')
- EDM5 STR ('Size')
- EDM51 STR (' 9 POINT; 12 POINT')
- EWIND SPACE 4,10
- ** EWIND - INITIALIZE EDIT WINDOW.
- *
-
- EWIND CLR.L -(SP)
- PEA TEWR(A6) ;EDIT WINDOW RECORD
- PEA EWNA(PC) ;SIZE
- PEA EWNB(PC) ;TITLE
- MOVE.B #1,-(SP) ;VISIBLE
- MOVE #4,-(SP) ;NO GROW DOCUMENT WINDOW
- MOVE.L #-1,-(SP) ;ON TOP
- MOVE.B #1,-(SP) ;ALLOW GO AWAY
- CLR.L -(SP)
- _NEWWINDOW
- MOVE.L (SP),EDWN(A6) ;EDIT WINDOW HANDLE
- _SETPORT
- MOVE #4,-(SP) ;USE MONACO FONT
- _TEXTFONT
- MOVE #2,ESTY(A6) ;SET SIZE MENU INDEX
- MOVE #12,-(SP) ;SIZE
- _TEXTSIZE
- MOVE #0,-(SP)
- _TEXTFACE
- MOVE #0,-(SP) ;OVERWRITE
- _TEXTMODE
-
- * ADD SCROLL BARS.
-
- CLR.L -(SP)
- MOVE.L EDWN(A6),-(SP)
- PEA EWNE(PC) ;VERTCAL RECT SCROLL AREA
- CLR.L -(SP)
- MOVE.B #1,-(SP) ;VISIBLE
- MOVE #0,-(SP) ;INITIAL VALUE
- MOVE #0,-(SP) ;MIN
- MOVE #1,-(SP) ;MAX
- MOVE #16,-(SP) ;SCROLL BAR
- CLR.L -(SP)
- _NewControl
- MOVE.L (SP)+,D0
- MOVE.L D0,VBAR(A6)
-
-
- * CREATE TE RECORD.
-
- EWNTE CLR.L -(SP)
- PEA EWNC(PC) ;EDIT DESTINATION RECTANGLE
- PEA EWND(PC) ;VIEW RECTANGLE
- _TENEW
- MOVE.L (SP)+,A3
- MOVE.L A3,EDTE(A6) ;EDIT TE HANDLE
- MOVE.L (A3),A3
- MOVE #-1,teCROnly(A3) ;NEW LINE ON CR
-
- RTS
-
- EWNA DC 38,01,338,510
- EWNB STR 'EDITOR'
- EWNC DC 4,4,64400,644 ;DESTINATION RECTANGLE
- EWND DC 4,4,284+15,494 ;EDITOR VIEW RECTANGLE
- EWNE DC 0,494,285+15,509 ;V SCROLL
- EWNF DC 285,0,300,509 ;H SCROLL
- LEF SPACE 4,10
- ** LEF - LOAD FILE INTO EDIT RECORD.
-
- LEF MOVE.L A1,FILA(A6) ;SAVE FIT ADDRESS
- MOVEQ #$09,D3 ;TAB
- MOVEQ #$0D,D4 ;C/R
- MOVEQ #$0A,D5 ;L/F
- MOVEQ #' ',D6
- MOVEQ #127,D7
- MOVE.L TMEM(A6),A4 ;SET UP SCRATCH READ BUFFER IN MAC.68K AREA
- SUB #32500,A4
- MOVE.L A4,-(SP)
- MOVE.L A4,A3 ;START OF NEW LINE
- LEF2 MOVE.L A4,A2
- SUB.L (SP),A2
- CMP #31500,A2
- BLE.S LEF2.2 ;IF FILE NOT TOO LARGE
- LEA LEFA(PC),A3
- BSR RWB ;*FILE TRUNCATED*
- BRA.S LEFX
-
- LEF2.2 JSR IOREADO(PC) ;READ ONE BYTE
- BEQ.S LEFX ;IF END OF FILE
- CMP.B D6,D0
- BLT.S LEF4 ;IF CONTROL CHARACTER
- LEF3 MOVE.B D0,(A4)+
- BRA LEF2
-
- LEF4 CMP.B D4,D0
- BEQ.S LEF5 ;IF END OF LINE
- CMP.B D5,D0
- BEQ LEF2 ;IGNORE LF
- CMP.B D3,D0
- BEQ.S LEF6 ;IF TAB
- CMP.B #$1A,D0
- BEQ.S LEFX ;IF END OF FILE CHARACTER
- BRA LEF2 ;IGNORE ANYTHING ELSE
-
- LEF5 MOVE.B D0,(A4)+
- MOVE.L A4,A3 ;START OF NEW LINE
- BRA LEF2
-
- LEF6 MOVE.L A4,D0
- SUB.L A3,D0 ;CHARACTER POSITION
- MOVE D0,D1
- AND #$FFF8,D1
- ADDQ #8,D1
- SUB D0,D1
- LEF7 MOVE.B D6,(A4)+ ;TAB OUT TO NEXT 8TH POSITION
- SUBQ #1,D1
- BNE LEF7
- BRA LEF2
-
- LEFX MOVE.L (SP)+,A2
- SUB.L A2,A4 ;SIZE OF EXPANDED FILE
- _MaxMem
- MOVE.L A4,D7
- MOVE.L A4,D6 ;ACTUAL TEXT LENGTH
- CMP.L A0,D7
- BGE.S LEFER ;IF NOT ENOUGH MEMORY
- MOVE.L EDTE(A6),-(SP)
- _TEDispose ;RELEASE CURRENT EDIT RECORD
- _MaxMem
- MOVE.L D6,D0
- ADD.L #500,D0 ;ASK FOR ACTUAL TEXT SIZE + 500
- _NewHandle
- BNE.S LEFER
- MOVE.L A0,A4
- _HLock ;LOCK TEXT BLOCK
- MOVE.L D6,D0
- LSR #2,D0
- MOVE.L (A0),A0
- LEFX2 MOVE.L (A2)+,(A0)+
- DBF D0,LEFX2 ;TRANSFER TEXT TO HEAP BLOCK
- MOVE.L A4,A0
- MOVE.L D6,D0
- _SetHandleSize ;SET TO ACTUAL TEXT SIZE
- BSR EWNTE ;SET UP TE RECORD
- MOVE.L teTextH(A3),A0
- _DisposHandle ;RELEASE NULL TEXT BLOCK
- MOVE.L A4,teTextH(A3) ;TEXT HANDLE
- MOVE D6,teLength(A3)
- MOVE.L (A4),A3
- MOVE.L D6,D7
- MOVE.L EDTE(A6),-(SP)
- _TECalText ;BUILD TE LINE ARRAY
- MOVE.L FILA(A6),A1
- MOVE.L EDWN(A6),-(SP)
- MOVE.L FFPB+ioFileName(A1),-(SP) ;USE FILE NAME FOR WINDOW TITLE
- _SetWTitle
- LEFX3 MOVE.L EDTE(A6),-(SP)
- _TEActivate
- BSR EDUPD ;PAINT SCREEN
- MOVE.L A4,A0
- _HUnlock
- MOVE.L FILA(A6),A1
- JSR IOCLS(PC) ;CLOSE READ PATH
- CLR.B EDAF(A6)
- RTS
-
- LEFER LEA LEFB(PC),A3
- BSR RWB
- BSR EWNTE ;SET UP TE RECORD
- BRA LEFX3
-
- LEFA DC.B #Z*FILE LARGER THAN 31000 CHARACTERS*
- LEFB DC.B #Z*NOT ENOUGH MEMORY TO LOAD FILE*
- MEF SPACE 4,10
- ** MEF - MERGE FILE INTO EDIT RECORD.
-
- MEF MOVE.L A1,FILA(A6) ;SAVE FIT ADDRESS
- MEF1 MOVE.L FILA(A6),A1
- LEA SCRS(A6),A3
- MOVE.L A3,A4
- MOVEQ #$09,D3
- MOVEQ #$0D,D4
- MOVEQ #$0A,D5
- MOVEQ #' ',D6
- MOVEQ #127,D7
- MEF2 JSR IOREADO(PC) ;READ ON BYTE
- BEQ.S MEFX ;IF END OF FILE
- CMP.B D6,D0
- BLT.S MEF4 ;IF CONTROL CHARACTER
- MOVE.B D0,(A4)+
- DBF D7,MEF2
- MEF3 SUB.L A3,A4
- MOVE.L A3,-(SP)
- MOVE.L A4,-(SP)
- MOVE.L EDTE(A6),-(SP)
- _TEInsert
- MOVE D4,-(SP)
- MOVE.L EDTE(A6),-(SP)
- _TEKey ;SET END OF LINE
- MOVE.L EDTE(A6),A3
- MOVE teLength(A3),D0
- CMP #31500,D0
- BLT MEF1 ;READ NEXT LINE
- LEA LEFA(PC),A3
- BSR RWB ;*FILE TOO LARGE*
- BRA MEFX
-
- MEF4 CMP.B D4,D0
- BEQ.S MEF3 ;IF END OF LINE
- CMP.B D5,D0
- BEQ MEF2 ;IGNORE LF
- CMP.B D3,D0
- BEQ.S MEF6 ;IF TAB
- CMP.B #$1A,D0
- BEQ.S MEFX ;IF END OF FILE CHARACTER
- BRA MEF2 ;IGNORE ANYTHING ELSE
-
- MEF6 MOVE.L A4,D0
- SUB.L A3,D0 ;CHARACTER POSITION
- MOVE D0,D1
- AND #$FFF8,D1
- ADDQ #8,D1
- SUB D0,D1
- MEF7 MOVE.B D6,(A4)+ ;TAB OUT TO NEXT 8TH POSITION
- SUBQ #1,D1
- BNE MEF7
- BRA MEF2
-
- MEFX JSR IOCLS(PC) ;CLOSE READ PATH
- CLR.B EDAF(A6)
- RTS
- OEF SPACE 4,10
- ** OEF - OPEN/LOAD EDIT FILE.
-
- OEF BSR OBF ;OPEN FILE
- BEQ.S OEF1 ;IF OPENED
- CMP #FNFERR,D0
- BNE.S OEF2 ;IF FILE THERE BUT UNAVAILABLE
- LEA INFT(PC),A2
- MOVE.L #'TEXT',(A2) ;'TEXT'
- BSR CREATF ;CREATE FILE
- BRA OEF
-
- OEF1 ST EDAF(A6) ;FILE LOAD REQUIRED
- ST EDFN(A6) ;FILE SELECTED
- RTS
-
- OEF2 LEA EDITD(PC),A3 ;*FILE UNAVAILABLE*
- BSR RWB
- RTS
- PREF SPACE 4,10
- ** PREF - PRINT EDIT FILE.
-
- PREF JSR IOPROP(PC) ;OPEN PRINT DRIVER
- MOVE.L EDTE(A6),A3
- MOVE.L (A3),A3
- MOVE teNLines(A3),D7 ;NUMBER OF LINES TO PRINT
- SUBQ #1,D7
- BLT.S PREFX ;IF EMPTY FILE
- LEA teLines(A3),A4
-
- * PRINT ON LINE.
-
- PREF1 MOVE.L teTextH(A3),A1
- MOVE.L (A1),A1
- CLR.L D0
- MOVE (A4)+,D4 ;START OF LINE
- MOVE (A4),D0
- ADD D4,A1
- SUB D4,D0 ;NUMBER OF BYTES IN LINE
- MOVE.L A1,ioBuffer(A0)
- MOVE.L D0,ioByteCount(A0)
- _Write
- LEA PREFA(PC),A1 ;ISSUE A LINE FEED
- MOVE.L A1,ioBuffer(A0)
- MOVEQ #1,D0
- MOVE.L D0,ioByteCount(A0)
- _Write
- DBF D7,PREF1
- PREFX RTS
-
- PREFA DC $0A00
- SEF SPACE 4,10
- ** SEF - SAVE EDIT FILE.
- * EXIT CCR .NE. 0 IF ERROR ON CLOSE.
-
- SEF MOVE.L EDTE(A6),A0
- MOVE.L (A0),A3 ;TE RECORD
- CLR.L D4
- MOVE TELENGTH(A3),D4 ;TEXT LENGTH
- MOVE.L EDITT(A6),A1
- LEA INFT(PC),A2
- MOVE.L #'TEXT',(A2) ;'TEXT'
- BSR OBFW ;OPEN FOR WRITE
-
- MOVE.L teTextH(A3),A0 ;TEXT HANDLE
- MOVE.L (A0),A0
- MOVE.L D4,D0
- JSR IOWRITEB(PC) ;WRITE FILE
- BNE.S SEFER
- JSR IOCLS(PC) ;CLOSE FILE
- BNE.S SEFER ;IF ERROR
- LEA DEFVOL(A6),A0
- LEA VOLNAM(A6),A4
- CLR.L (A4)
- MOVE.L A4,ioFileName(A0)
- MOVE.L EDITT(A6),A1
- MOVE FFPB+ioVRefNum(A1),ioVRefNum(A0) ;SET CURRENT VOLUME
- CLR ioVolIndex(A0)
- _GetVolInfo
- _FlushVol
-
- SEF1 CLR D0
- RTS
-
- SEFER LEA EDITG(PC),A3 ;*UNABLE TO WRITE FILE*
- BSR IFN
- BSR IFE ;STUFF ERROR NUMBER
- BSR RWB
- BRA SEF1
-
- * EDITOR ERROR AND WARNING MESSAGES.
-
- EDITC DC #Z*AN EDIT FILE IS ALREADY OPEN.*
- EDITD DC #Z*FILE UNAVAILABLE.*
- EDITE DC #Z*A FILE IS NOT CURRENTLY OPEN.*
- EDITG DC #Z*UNABLE TO WRITE FILE - .*
- EDITH DC #Z*ERASE CURRENT EDIT TEXT ?*
- EDITJ DC #Z*NO PATHS FOUND.*
-
- * END OF TEXT EDIT INCLUDE FILE.